import type { SetEmptyCheckOptions } from '../types'

export class SetUtils {
  /**
   * 检查 Set 是否为空
   */
  static isSetEmpty(hashes: Set<string>, options: SetEmptyCheckOptions = {}): boolean {
    const {
      treatEmptyStringAsEmpty = true,
      treatNullAsEmpty = true,
      treatWhitespaceAsEmpty = true,
      isEmptyValue,
    } = options

    // 快速检查：Set 完全为空
    if (hashes.size === 0) {
      return true
    }

    // 自定义空值检测函数
    const isValueEmpty = isEmptyValue || ((value: string): boolean => {
      if (value === null || value === undefined) {
        return treatNullAsEmpty
      }

      if (value === '') {
        return treatEmptyStringAsEmpty
      }

      if (value.trim() === '') {
        return treatWhitespaceAsEmpty
      }

      return false
    })

    // 检查所有值是否都为空
    for (const hash of hashes) {
      if (!isValueEmpty(hash)) {
        return false // 发现非空值
      }
    }

    return true
  }
}
